from langchain.chat_models.gigachat import GigaChat
from config import gigaChatCredentials

llm = GigaChat(credentials=gigaChatCredentials, scope='GIGACHAT_API_CORP', verify_ssl_certs=False)

from langchain.schema import HumanMessage

doLog = True

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

def bibliography():
    fioGood = False
    fio = ''
    while fioGood != True:
        fio = input("ФИО авторов: ")
        fioQuestion = f'Это похоже на ФИО? {fio} Ответь Да или Нет'
        if doLog:
            print(fioQuestion)
        fioResp = llm([HumanMessage(content=fioQuestion)]).content
        if doLog:
            print(fioResp)
        if fioResp == 'Да':
            fioGood = True
            break
        # TODO: Если это список авторов и авторов больше 4 - оформление надо чуть по другому сделать
        listQuestion = f'Это является списком фамилий? {fio}. Ответь строго Да или Нет'
        if doLog:
            print(listQuestion)
        listResp = llm([HumanMessage(content=listQuestion)]).content
        if doLog:
            print(listResp)
        if listResp == 'Да':
            fioGood = True
            break
        print('Это не похоже на ФИО авторов. Измените ввод')

    workNameGood = False
    workName = ''
    while workNameGood != True:
        workName = input("Название работы: ")
        workNameQuestion = f'Это похоже на название статьи или книги? {workName}. Ответь строго Да или Нет'
        if doLog:
            print(workNameQuestion)
        workNameResp = llm([HumanMessage(content=workNameQuestion)]).content
        if doLog:
            print(workNameResp)
        if workNameResp == 'Да':
            workNameGood = True
            break
        print('Это не похоже на Название работы. Измените ввод')

    placeGood = False
    place = ''
    while placeGood != True:
        place = input("Место издания: ")
        placeQuestion = f'Это похоже на название города или населенного пункта? {place}. Ответь строго Да или Нет'
        if doLog:
            print(placeQuestion)
        placeResp = llm([HumanMessage(content=placeQuestion)]).content
        if doLog:
            print(placeResp)
        if placeResp == 'Да':
            placeGood = True
            break
        print('Это не похоже на Место издания. Должно быть название города или населенного пункта. Измените ввод')

    publisherGood = False
    publisher = ''
    while publisherGood != True:
        publisher = input("Издательство: ")
        publisherQuestion = f'Это похоже на название Издательства? {publisher}. Ответь строго Да или Нет'
        if doLog:
            print(publisherQuestion)
        publisherResp = llm([HumanMessage(content=publisherQuestion)]).content
        if doLog:
            print(publisherResp)
        if publisherResp == 'Да':
            publisherGood = True
            break
        print('Это не похоже на Издательство. Измените ввод')

    yearGood = False
    year = ''
    while yearGood != True:
        year = input("Год издания: ")
        yearQuestion = f'Является ли это годом? {year}. Ответь строго Да или Нет'
        if doLog:
            print(yearQuestion)
        yearResp = llm([HumanMessage(content=yearQuestion)]).content
        if doLog:
            print(yearResp)
        if yearResp == 'Да':
            yearGood = True
            break
        print('Это не похоже на Год. Измените ввод')

    pagesGood = False
    pages = ''
    while pagesGood != True:
        pages = input("Количество страниц: ")
        pagesQuestion = f'Это похоже на целое положительное число? {pages}. Ответь строго Да или Нет'
        if doLog:
            print(pagesQuestion)
        pagesResp = llm([HumanMessage(content=pagesQuestion)]).content
        if doLog:
            print(pagesResp)
        if pagesResp == 'Да':
            pagesGood = True
            break
        print('Это не похоже на Количество страниц. Должно быть целое положительное число. Измените ввод')

    question = f'Оформи ссылку согласно ГОСТ Р 7.0.5–2008. ФИО Авторов: {fio}. Название работы: {workName}. Место издания: {place}. Издательство: {publisher}. Год издания: {year}. Количество страниц: {pages}.'

    if doLog:
        print(question)

    resp = llm([HumanMessage(content=question)]).content

    print(resp)

bibliography()